package com.woniu.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.woniu.entity.Vehicle;
import com.woniu.service.VehicleService;
import com.woniu.mapper.VehicleMapper;
import com.woniu.vo.VehicleVO;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
* @author Apricity
* @description 针对表【vehicle(车辆表)】的数据库操作Service实现
* @createDate 2025-02-13 20:16:59
*/
@Service
/**
 * VehicleServiceImpl类实现了VehicleService接口，提供与车辆相关的服务。
 * 它继承了ServiceImpl类，用于简化数据访问层的实现。
 */
public class VehicleServiceImpl extends ServiceImpl<VehicleMapper, Vehicle>
    implements VehicleService {

    @Resource
    /**
     * vehicleMapper用于与数据库交互，执行与车辆相关的SQL语句。
     */
    private VehicleMapper vehicleMapper;

    @Override
    /**
     * 根据关键字、页码和页面大小获取车辆列表。
     *
     * @param keyword 搜索车辆的关键字，可以是车牌号、车型等信息。
     * @param pageNum 页码，表示请求的车辆列表的页数。
     * @param pageSize 页面大小，表示每页显示的车辆数量。
     * @return 返回一个车辆列表，根据关键字过滤并分页。
     */
    public List<VehicleVO> getVehicleList(String keyword, Integer pageNum, Integer pageSize) {
        Page<VehicleVO> page = new Page<>(pageNum, pageSize);
        List<VehicleVO> vehicles;

        if (keyword != null && !keyword.trim().isEmpty()) {
            vehicles = vehicleMapper.queryVehicleByKeyword(keyword, page);
        } else {
            vehicles = vehicleMapper.queryVehicleList(page);
        }

        return vehicles;
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    /**
     * 添加新车辆到数据库。
     *
     * @param vehicle 要添加的车辆对象，包含车辆的详细信息。
     * @return 如果车辆成功添加，返回true；否则返回false。
     */
    public boolean addVehicle(Vehicle vehicle) {
        return vehicleMapper.insert(vehicle) > 0;
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    /**
     * 根据车辆ID删除车辆。
     *
     * @param id 要删除的车辆的ID。
     * @return 如果车辆成功删除，返回true；否则返回false。
     */
    public boolean deleteVehicle(Long id) {
        return vehicleMapper.deleteById(id) > 0;
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    /**
     * 更新车辆信息。
     *
     * @param vehicle 包含更新信息的车辆对象。
     * @return 如果车辆信息成功更新，返回true；否则返回false。
     */
    public boolean updateVehicle(Vehicle vehicle) {
        if (vehicle.getId() == null) {
            return false;
        }
        return vehicleMapper.updateVehicle(vehicle) > 0;
    }
}





